From e379ea617ace37faf23977e3387b40ba0fe06b1b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Fri, 4 May 2018 20:20:09 +0200 Subject: [PATCH] stylecontext: Draw arrow-less insertion cursors as color nodes This lets us avoid an often used cairo node. --- gtk/gtkstylecontext.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index c26ab4136e..d01602cc82 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -1787,15 +1787,39 @@ snapshot_insertion_cursor (GtkSnapshot *snapshot, PangoDirection direction, gboolean draw_arrow) { - graphene_rect_t bounds; - cairo_t *cr; - - get_insertion_cursor_bounds (height, direction, draw_arrow, &bounds); - cr = gtk_snapshot_append_cairo (snapshot, &bounds); + if (draw_arrow) + { + cairo_t *cr; + graphene_rect_t bounds; + + get_insertion_cursor_bounds (height, direction, draw_arrow, &bounds); + cr = gtk_snapshot_append_cairo (snapshot, &bounds); + + draw_insertion_cursor (context, cr, 0, 0, height, is_primary, direction, draw_arrow); - draw_insertion_cursor (context, cr, 0, 0, height, is_primary, direction, draw_arrow); + cairo_destroy (cr); + } + else + { + GdkRGBA primary_color; + GdkRGBA secondary_color; + int stem_width; + int offset; - cairo_destroy (cr); + _gtk_style_context_get_cursor_color (context, &primary_color, &secondary_color); + + stem_width = height * CURSOR_ASPECT_RATIO + 1; + + /* put (stem_width % 2) on the proper side of the cursor */ + if (direction == PANGO_DIRECTION_LTR) + offset = stem_width / 2; + else + offset = stem_width - stem_width / 2; + + gtk_snapshot_append_color (snapshot, + is_primary ? &primary_color : &secondary_color, + &GRAPHENE_RECT_INIT (- offset, 0, stem_width, height)); + } } /** -- 2.30.2